#pragma once



#include "../../DbType.h"
#include "SQLObject.h"
#include "SQLDbTypedObject.h"

class SQLStatement 
: virtual public SQLObject,
virtual public SQLDbTypedObject
{
public:
  virtual ~SQLStatement(){

  };

  // SQLStatement_ptr clone()
  virtual SQLObject_ptr clone() = 0;
  // {
  //   // SQLStatement_ptr x = new SQLStatement();
  //   // return x;
  //   SQLObject_ptr clone_tmp = SQLStatement_ptr(new SQLStatement());
  //   SQLStatement_ptr clone_res = std::dynamic_pointer_cast<SQLStatement>(clone_tmp);

  //   return clone_res;
  // }

  virtual SQLObject_ptr getParent() { return NULL; };

  virtual void setParent(SQLObject_ptr parent){};

  // virtual std::map<string_ptr , void*>& getAttributes() {
  // 	std::map<string_ptr , void*> x;
  // 	return x;
  // };

  // virtual Object_ptr getAttribute(string_ptr name) { return NULL; };

  // virtual void putAttribute(string_ptr name, Object_ptr value){};

  // virtual std::map<string_ptr , void*> &getAttributesDirect() {
  // 	std::map<string_ptr , void*> x;
  // 	return x;
  // };

  virtual void output(string_ptr buf){};

  // virtual void accept0(SQLASTVisitor *visitor) {};

  virtual string_ptr getClass()
  {
    return make_string_ptr("SQLStatement");
  }

  virtual string_ptr toString()
  {
    return make_string_ptr("");
  }

  virtual DbType_ptr getDbType(){};
  virtual BOOL_ptr isAfterSemi(){};
  virtual void setAfterSemi(BOOL_ptr afterSemi){};

  virtual bool containsAttribute(string_ptr name){};
  virtual void addBeforeComment(string_list_ptr comments){};
  virtual void addBeforeComment(wstring_list_ptr comments){};
  virtual string_list_ptr getBeforeCommentsDirect(){};
  virtual void addAfterComment(string_ptr comment){};
  virtual void addAfterComment(string_list_ptr comments){};
  virtual void addAfterComment(wstring_list_ptr comments){};
  virtual string_list_ptr getAfterCommentsDirect(){};
  virtual bool hasBeforeComment(){};
  virtual bool hasAfterComment(){};
};

